import 'dart:ui';

import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:liuxlcommon/lget/lget.dart';
import 'package:liuxlcommon/util/string_utils.dart';
import 'package:liuxlcommon/view/extension_widget.dart';
import 'package:ladder_cash/app/com/http/http_request.dart';
import 'package:ladder_cash/app/com/plugin/device_data_plugin.dart';
import 'package:ladder_cash/app/com/view/webview/my_web/my_web_page.dart';
import 'package:ladder_cash/app/page/component/common.dart';
import 'package:ladder_cash/app/page/component/decoration_bg.dart';
import 'package:ladder_cash/config/super_theme.dart';
import 'package:ladder_cash/generated/l10n.dart';
import 'package:ladder_cash/value/app_const.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:liuxlcommon/util/toast_util.dart';
import 'package:liuxlcommon/view/lxl_widget.dart';
import 'package:liuxlcommon/view/my_box.dart';
import 'package:liuxlcommon/view/my_style.dart';
import 'package:ladder_cash/app/app.dart';
import 'package:ladder_cash/generated/assets.dart' as myAssets;
import 'package:ladder_cash/value/app_colors.dart';
import 'package:ladder_cash/value/app_lstyle.dart';
import 'package:permission_handler/permission_handler.dart';

import '../../../gen/assets.gen.dart';
import '../../../library/src/logger.dart';

class CommonView {
  // static loginSafetyVerifyDialog({required Function() confirm}) {
  //   return commDialog(confirm: confirm, children: [
  //     // LText("Por favor confirmar",
  //     //     lStyle: AppLStyle.titleStyle..fontSize = 18.sp),
  //     LText("Por favor confirmar",
  //         lStyle: AppLStyle.titleStyle..textAlign = TextAlign.center),
  //     LSizeH(10.w),
  //     LText(
  //         "Para facilitar la finalización de la verificación del dispositivo, leeremos su SMS de verificación para confirmar el estado de envío del SMS de verificación de su dispositivo.",
  //         lStyle:
  //             LStyle(textAlign: TextAlign.center, color: AppColors.textColor)),
  //   ]);
  // }
  //
  // static loginAgreenDialog({onConfirm, agree = true}) {
  //   List<Map> mess = [
  //     {
  //       "title": "Registros de llamadas",
  //       "value":
  //           "Cuando se encuentre un nuevo dispositivo para iniciar sesión en su cuenta, a fin de proteger su seguridad financiera, utilizaremos una contraseña de voz dinámica para verificar su identidad, le pediremos que realice una llamada de voz y le proporcionaremos una contraseña dinámica. La contraseña será verificada en su dispositivo. Revisaremos su historial de llamadas para asegurarnos de que la aplicación esté actualmente instalada en el dispositivo. Esta operación carga la información de su registro de llamadas en https://dinero-rapido.nakodarfin-in.com utilizando un método de encriptación fuerte para verificar la contraseña dinámica enviada por nuestra aplicación. Solo recopilamos esta información con su consentimiento expreso y solo para verificación de seguridad. Una vez verificada, eliminaremos la información. Nunca compartiremos estos datos con terceros sin su consentimiento."
  //     },
  //     {
  //       "title": "SMS",
  //       "value":
  //           "Recopilamos el remitente, la parte de la transacción, el tipo de transacción, el monto de la transacción, etc. de los mensajes SMS financieros y de transacciones financieras de su dispositivo. Esto nos ayuda a identificar las diversas cuentas bancarias que puede tener, los patrones de flujo de efectivo, las descripciones y los montos de sus transacciones como usuario que nos proporciona para ayudarnos a obtener crédito, y nos permite determinar su perfil de riesgo y brindarle un análisis crediticio adecuado. . También determinaremos si está en riesgo de fraude en función de sus otros mensajes de texto para evitar que su solicitud se venza. Este proceso le permitirá obtener facilidades financieras de las entidades financieras reguladas disponibles en la plataforma. Estos datos de SMS también incluyen sus datos históricos. Mientras usa la aplicación, envía regularmente todos los mensajes SMS a nuestros servidores afiliados y a nosotros. Los SMS se cargarán en https://dinero-rapido.nakodarfin-in.com a través de una conexión https segura. Después de determinar su perfil de riesgo, eliminaremos el mensaje de texto."
  //     },
  //     {
  //       "title": "Aplicación instalada",
  //       "value":
  //           "Recopilamos una lista de la información de metadatos de las aplicaciones instaladas que incluye el nombre de la aplicación, el nombre del paquete, la hora de instalación, la hora de actualización, el nombre de la versión y el código de versión de cada aplicación instalada en su dispositivo para evaluar su solvencia y enriquecer su perfil con información preaprobada. ofertas de préstamo personalizadas. Los metadatos de las aplicaciones instaladas se cargarán en https://dinero-rapido.nakodarfin-in.com a través de una conexión https segura. Después de determinar su perfil de riesgo, eliminaremos los datos."
  //     },
  //     {
  //       "title": "Cámara",
  //       "value":
  //           "Accedemos a su cámara para tomar las fotos requeridas para la verificación de identidad, así como para el reconocimiento facial del usuario."
  //     },
  //     {
  //       "title": "Calendario",
  //       "value":
  //           "Necesitamos permisos de recordatorio de calendario para que podamos establecer recordatorios de fecha de pago para usted cuando su préstamo sea exitoso, para evitar afectar su calificación crediticia debido a pagos atrasados."
  //     },
  //     {
  //       "title": "Ubicación",
  //       "value":
  //           "Dependiendo de los permisos de su dispositivo, podemos recopilar información sobre la ubicación precisa de su dispositivo. Puede dejar de recopilar información de ubicación precisa en cualquier momento. Esta información se utiliza para ofrecerle recomendaciones personalizadas."
  //     },
  //     {
  //       "title": "Información del dispositivo",
  //       "value":
  //           "Recopilamos información sobre cómo accede a nuestros Servicios, incluidos datos sobre el dispositivo y la red que utiliza, como el modelo de hardware, la versión del sistema operativo, la red móvil, la dirección IP, el identificador único del dispositivo y la región del dispositivo y la configuración de idioma, el tipo de navegador y la versión de la aplicación."
  //     }
  //   ];
  //
  //   var xy = GetBuilder<CommonControll>(
  //       init: CommonControll(),
  //       builder: (logic) => LRow(
  //             lStyle: LStyle(
  //                 width: double.infinity,
  //                 crossAxisAlignment: CrossAxisAlignment.center,
  //                 mainAxisAlignment: MainAxisAlignment.center),
  //             children: [
  //               // LImage(
  //               //   agree
  //               //       ? Assets.iconLogninIconSelected
  //               //       : Assets.iconLogninIconSelect,
  //               //   lStyle: LStyle(
  //               //       width: 12.w,
  //               //       height: 12.w,
  //               //       margin: EdgeInsets.symmetric(horizontal: 3.w)),
  //               //   onTap: () {
  //               //     agree = !agree;
  //               //     logic.update();
  //               //   },
  //               // ),
  //               LSizeBoxWidth(5.w),
  //               [
  //                 LText.easy(S.current.agreeTxt1, 14.sp, FontWeight.w400),
  //                 InkWell(
  //                     child: Text(S.current.agreeTxt2,
  //                         style: TextStyle(
  //                             decoration: TextDecoration.underline,
  //                             color: AppColors.primaryColor,
  //                             fontSize: 14.sp)),
  //                     onTap: () async {
  //                       HttpRequest.requestDefaultParamsModel =
  //                           await DeviceDataPlugin.getRequestDefaultParams;
  //                       Get.to(MyWebPage(
  //                         url:
  //                             "https://dinero-rapido.nakodarfin-in.com/privacy-policy.html",
  //                       ));
  //                     })
  //               ].column
  //             ],
  //           ));
  //
  //   commDialog(
  //       confirm: () {
  //         if (agree) {
  //           onConfirm();
  //         } else {
  //           ToastUtils.toast(
  //               "Por favor, acepte y marque el acuerdo de privacidad");
  //         }
  //       },
  //       isShowClose: false,
  //       children: [
  //         WillPopScope(
  //           onWillPop: () async {
  //             return Future.value(false);
  //           },
  //           child: LColumn(
  //             lStyle: LStyle(
  //                 padding: EdgeInsets.symmetric(horizontal: 1.w),
  //                 height: Get.height / 10 * 5),
  //             children: [
  //               [
  //                 SizedBox(
  //                     width: double.infinity,
  //                     child: Stack(children: [
  //                       LText("Acuerdo de privacidad",
  //                           lStyle: LStyle(
  //                               textAlign: TextAlign.center,
  //                               fontSize: 24.sp,
  //                               color: const Color(0xFF23262F))),
  //                     ])),
  //                 LSizeBoxHeight(14.w),
  //                 LText(
  //                     "Para que pueda utilizar todas las funciones de la aplicación normalmente, necesitamos obtener algunos equipos y datos personales. Estos datos pueden incluir parte de su información de privacidad, lea y acepte lo siguiente:",
  //                     lStyle: LStyle(
  //                         fontSize: 14.sp, color: const Color(0xFF777E90))),
  //                 LSizeBoxHeight(14.w),
  //                 for (Map map in mess) ...[
  //                   LText(map['title'],
  //                       lStyle: LStyle(
  //                           width: double.infinity,
  //                           fontWeight: FontWeight.w600)),
  //                   LSizeH(8.w),
  //                   LText(map['value'],
  //                       lStyle: LStyle(
  //                           radius: 12.w,
  //                           backgroundColor: const Color(0xFFEFFFF2),
  //                           padding: EdgeInsets.symmetric(
  //                               horizontal: 14.w, vertical: 10.w))),
  //                   LSizeH(15.w)
  //                 ]
  //               ].columnSlidExpand,
  //               LSizeH(10.w),
  //               xy
  //             ],
  //           ),
  //         )
  //       ]);
  // }

  static bottomDialog(
      {String? title,
      String? message,
      required List<Widget> children,
      confirm,
      height,
      confirmTxt}) {
    Get.bottomSheet(
        LColumn.eazy([
          LRow.eazy([
            20.lsw,
            LText.easy(title, 17.w, fw5, Colors.white)
                .align(Alignment.center)
                .size(null, 53.w),
            LExpand(),
            LContainer(
                child: Image.asset(
                    App.localeEn
                        ? myAssets.Assets.molopNewBottomdialogclose
                        : myAssets.Assets.molopNewBottomdialogclosemx,
                    height: 20.w,
                    width: 77.w),
                onTap: () => Get.back()).margin(bottom: 10.w),
            15.lsw
          ]),
          ...children,
          LExpand(),
          LText(confirmTxt ?? S.current.confirm,
              lStyle: confrimSty..width = 335.w, onTap: confirm),
          LSizeH(LGet.bottomPadding(App.appContext) + 10.w)
        ])
            .size(375.w, height ?? 399.w)
            .bgImg(myAssets.Assets.molopNewBottomdialogbg),
        isScrollControlled: true);
  }

  static idPanDialog(confirm) {
    return commDialog(confirm: confirm, title: 'CORRECT CASE', children: [
      LText.easy(
              'Please follow the example to take a photo of a face correctly',
              12.sp)
          .textAlign(TextAlign.center),
      // LImage.easy(Assets.bgImgPan, 191.w, 291.w).margin(top: 23.w, bottom: 20.w),
      // LImage.easy(Assets.bgImgPanDialog, 77.w, 299.w).margin(bottom: 34.w),
      LText.easy('Please click to start certification', 16.sp, fw5,
              0xFFF75B00.color)
          .margin(bottom: 29.w),
    ]);
  }

  static idFrontDialog(confirm, {title, String? message,bool isFace = false}) {
    return commDialog(
        isFace: isFace,
        confirm: confirm,
        message: message,
        title: title,
        confirmTxt: "Confirmation",
        bgImg: Assets.cer.cerPanBg.path,
        height: 592.w,
        children: [
          // LImage.easy(Assets.bRzIdFrontDialog, 243.w, 259.23.w),
        ]);
  }

  static idBackDialog(confirm) {
    // return commDialog(confirm: confirm, children: [
    //   LImage.easy(Assets.tzIdBackSample, 216.w, 262.w),
    //   16.lsh,
    //   LImage.easy(Assets.tzIdBackSampleWrong, 113.w, 262.w),
    // ]);
  }

  static idFaceDialog(confirm) {
    return commDialog(
        confirm: confirm,
        // title: title,
        confirmTxt: "Confirmation",
        bgImg: myAssets.Assets.molopNewIdfacedialog,
        height: 630.w,
        children: [
          // LImage.easy(Assets.bRzIdFrontDialog, 243.w, 259.23.w),
        ]);
  }

  static signOutDialog() {
    bool agree = false;
    return commDialog(
        title: "Exit",
        confirm: () {
          if (agree) {
            Get.back();
            App.logout();
          } else {
            ToastUtils.toast('Please agree to the above');
          }
        },
        children: [
          14.lsh,
          LText.easy(S.current.accountCancellation, 16.sp, FontWeight.w600),
          16.lsh,
          LColumn(
              lStyle: LStyle(
                  backgroundColor: const Color(0xFfF5F5F9),
                  padding: EdgeInsets.all(14.w),
                  margin: EdgeInsets.symmetric(horizontal: 20.w)),
              children: [
                LText.easy(S.current.acDialogTxt1, 12.sp),
                LText.easy(S.current.acDialogTxt2, 12.sp, null,
                    AppColors.primaryColor),
              ]),
          24.lsh,
          GetBuilder(
              init: CommonControll(),
              builder: (l) => LRow(
                    lStyle: LStyle(),
                    children: [
                      // LImage(
                      //   agree ? Assets.iIconCompleteAct : Assets.iIconCompleteDef,
                      //   lStyle: LStyle(height: 14.w, padding: const EdgeInsets.symmetric(horizontal: 5)),
                      //   onTap: () {
                      //     agree = !agree;
                      //     l.update();
                      //   },
                      // ),
                      LText.easy(S.current.acDialogTxt3, 12.sp)
                    ],
                    onTap: () {
                      agree = !agree;
                      l.update();
                    },
                  )),
          24.lsh
        ]);
  }

  static commDialog(
      {required Function() confirm,
      bool isFace = false,
      String? confirmTxt,
      message,
      title,
      width,
      height,
      List<Widget>? children,
      marginTop,
      bgWhite,
      bgImg,
      isShowClose = true}) {
    commstyDialog(
        isFace: isFace,
        title: title,
        confirm: confirm,
        confirmTxt: confirmTxt,
        message: message,
        children: children,
        marginTop: marginTop,
        height: height,
        width: width,
        bgImg: bgImg,
        bgWhite: bgWhite,
        isShowClose: isShowClose);
  }

  ///普通 ，只有 confirm 与 close
  static commstyDialog(
      {required Function() confirm,
      bool isFace = false,
      String? confirmTxt,
      message,
      title,
      bgWhite,
      height,
      width,
      bgImg,
      List<Widget>? children,
      marginTop,
      isShowClose = true}) {
    double dWidth = width ?? 328.w;
    Get.dialog(Column(
      children: [
        Expanded(
          child: Container(),
        ),
        SizedBox(
          height: 560.w,
          child: Column(
            children: [
              Container(
                padding: EdgeInsets.symmetric(horizontal: 20.w),
                height:30.w,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.end,
                  children: [
                    InkWell(
                      onTap: () {
                        Get.back();
                      },
                      child: Image.asset(
                        Assets.cer.cerClose.path,
                        width: 30.w,
                        height: 30.w,
                      ),
                    ),
                  ],
                ),
              ),
              30.lsh,
              Container(
                margin: EdgeInsets.symmetric(horizontal: 20.w),
                padding: EdgeInsets.only(left: 20,right: 20.w,bottom: 10.w,top: 40.w),
                width: width,
                height: 497.w,
                decoration: BoxDecoration(
                    image: getDecorationBg(Assets.cer.cerPanBg.path)),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    if (title != null)
                      textBorder(title,
                          fontWeight: FontWeight.w900,
                          fontsize: 24.sp,
                          color: SuperTheme.textTitltPrimary,
                          borderColor: Colors.black,
                          fontFamily: 'italic'),
                    if (message != null)
                      middleFont(message,
                          fontsize: 14.sp, fontWeight: FontWeight.w500),
                    if (children != null) ...children,
                    Image.asset(
                      isFace
                          ? Assets.cer.cerFacePeople.path
                          : Assets.cer.cerPanPeople.path,
                      width: 295,
                      height: 158.w,
                    ),
                    Image.asset(
                      isFace
                          ? Assets.cer.cerFaceError.path
                          :Assets.cer.cerPanError.path ,
                      width: 295,
                      height: 66.w,
                    ),
                    Container(
                      height: 46.w,
                      child: commonBtn(S.current.confirm, callback: confirm),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
        Expanded(child: Container())
      ],
    ));
  }

  static LStyle get confrimSty => LStyle(alignment: Alignment.center, css: '''
                            width: 345px;
                            height: 45px;
                            background: #FA9A09;
                            border-radius: 5px;  
                            font-size: 18px;
                            font-weight: 600;
                            color: #FFFFFF;
                              ''');
}

DateTime? _lastWillPopAt;
Duration delay = const Duration(seconds: 2);

doubleExit({child}) {
  return WillPopScope(
    child: child,
    onWillPop: () async {
      print(_lastWillPopAt);
      if (_lastWillPopAt == null ||
          _lastWillPopAt != null &&
              DateTime.now().difference(_lastWillPopAt!) > delay) {
        _lastWillPopAt = DateTime.now();
        ToastUtils.toast("Press again to exit the app");
        return false;
      }
      return true;
    },
  );
}

class CommonControll extends GetxController {}

bool firstRequest = true;

Future<bool> checkInternetConnection({isNetwork = false}) async {
  // return true;
  var connectivityResult = await (Connectivity().checkConnectivity());
  if (connectivityResult == ConnectivityResult.mobile ||
      connectivityResult == ConnectivityResult.wifi) {
    return true;
  } else {
    if (firstRequest || isNetwork) {
      await Future.delayed(const Duration(seconds: 1));
      firstRequest = false;
      return await checkInternetConnection(isNetwork: isNetwork);
    }
    return false;
  }
}

bool isPermissionsDialog = false;

void showPermissionsDialog({title, message, Function? callback}) {
  Get.dialog(CupertinoAlertDialog(
    title: Text(title ?? "Unable to access network"),
    content: Column(
      children: [
        const SizedBox(height: 5),
        Text(message ?? "Allow the application to access the network"),
        const SizedBox(height: 12),
        Row(
          children: [
            LExpand(
              child: CupertinoDialogAction(
                onPressed: () async {
                  isPermissionsDialog = true;
                  Get.back();
                },
                child: Text(S.current.cancel),
              ),
            ),
            LExpand(
              child: CupertinoDialogAction(
                onPressed: () async {
                  isPermissionsDialog = true;
                  if (callback != null) {
                    // 若不为 null，则执行回调函数
                    // callback();
                    if(await openAppSettings()){
                      callback();
                    }
                  }
                  Get.back(result: await openAppSettings());
                },
                child: Text(App.localeEn ? 'Settings' : 'Pengaturan'),
              ),
            ),
          ],
        )
      ],
    ),
  ));
  // showCupertinoDialog(
  //   context: context,
  //   builder: (BuildContext context) =>,
  // );
}
